// 一个简单的静态文件服务器，使用 Dart 的 Shelf 框架
// 从 'public' 目录提供静态文件，默认页面为 'index.html'

import 'dart:async';
import 'dart:io';
import 'package:shelf/shelf.dart';
import 'package:shelf/shelf_io.dart' as shelf_io;
import 'package:shelf_static/shelf_static.dart' as shelf_static;

// 程序主入口
Future<void> main(List<String> arguments) async {
  // 从环境变量获取端口号，若未设置则默认使用 8080
  // 使用 int.parse 解析端口号，?? 提供默认值
  final serverPort = int.parse(Platform.environment['PORT'] ?? '8080');

  // 创建静态文件处理器，指定从 'public' 目录提供文件
  // 当访问目录时，默认返回 'index.html'
  final staticHandler = shelf_static.createStaticHandler(
    'public',
    defaultDocument: 'index.html',
  );

  // 使用 Cascade 构建请求处理链，目前仅包含静态文件处理器
  // Cascade 允许按顺序尝试多个处理器，适合扩展功能
  final requestCascade = Cascade().add(staticHandler);

  // 启动 HTTP 服务器，监听所有 IPv4 地址上的指定端口
  // logRequests 中间件会记录所有请求，便于调试
  final server = await shelf_io.serve(
    logRequests().addHandler(requestCascade.handler),
    InternetAddress.anyIPv4,
    serverPort,
  );

  // 输出服务器运行信息，提示访问地址和停止方式
  print('服务器运行于 http://${server.address.host}:${server.port}');
  print('按 Ctrl+C 停止服务器');
}
